import java.math.BigInteger;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import org.fisco.bcos.sdk.abi.FunctionReturnDecoder;
import org.fisco.bcos.sdk.abi.TypeReference;
import org.fisco.bcos.sdk.abi.datatypes.Address;
import org.fisco.bcos.sdk.abi.datatypes.Bool;
import org.fisco.bcos.sdk.abi.datatypes.DynamicArray;
import org.fisco.bcos.sdk.abi.datatypes.Event;
import org.fisco.bcos.sdk.abi.datatypes.Function;
import org.fisco.bcos.sdk.abi.datatypes.Type;
import org.fisco.bcos.sdk.abi.datatypes.Utf8String;
import org.fisco.bcos.sdk.abi.datatypes.generated.Bytes32;
import org.fisco.bcos.sdk.abi.datatypes.generated.Uint256;
import org.fisco.bcos.sdk.abi.datatypes.generated.tuples.generated.Tuple1;
import org.fisco.bcos.sdk.abi.datatypes.generated.tuples.generated.Tuple10;
import org.fisco.bcos.sdk.abi.datatypes.generated.tuples.generated.Tuple2;
import org.fisco.bcos.sdk.abi.datatypes.generated.tuples.generated.Tuple3;
import org.fisco.bcos.sdk.abi.datatypes.generated.tuples.generated.Tuple4;
import org.fisco.bcos.sdk.abi.datatypes.generated.tuples.generated.Tuple5;
import org.fisco.bcos.sdk.abi.datatypes.generated.tuples.generated.Tuple6;
import org.fisco.bcos.sdk.abi.datatypes.generated.tuples.generated.Tuple7;
import org.fisco.bcos.sdk.client.Client;
import org.fisco.bcos.sdk.contract.Contract;
import org.fisco.bcos.sdk.crypto.CryptoSuite;
import org.fisco.bcos.sdk.crypto.keypair.CryptoKeyPair;
import org.fisco.bcos.sdk.eventsub.EventCallback;
import org.fisco.bcos.sdk.model.CryptoType;
import org.fisco.bcos.sdk.model.TransactionReceipt;
import org.fisco.bcos.sdk.model.callback.TransactionCallback;
import org.fisco.bcos.sdk.transaction.model.exception.ContractException;

@SuppressWarnings("unchecked")
public class MedicalCrowdsourcing extends Contract {
    public static final String[] BINARY_ARRAY = {"608060405234801561001057600080fd5b50336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550614505806100606000396000f30060806040526004361061011d576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063107046bd146101225780632245f152146103465780633257ad1c1461037357806332651644146103f557806336fbad261461050c5780633a9c9ffc14610537578063486ee3311461056257806348c35ad4146105d5578063515a39b6146106165780635d4f7f9d1461077c5780635ec0044314610838578063642f2eaf146109605780636ede423114610ac657806376d1aa1714610b4a5780637bed350114610d515780638da5cb5b14610f5857806395f6bfe114610faf578063bef9549c14611063578063c0c55b17146111c0578063cf7be6ec14611242578063fc1ce66c1461134b575b600080fd5b34801561012e57600080fd5b5061014d6004803603810190808035906020019092919050505061139e565b604051808b81526020018060200180602001806020018a1515151581526020018981526020018815151515815260200187815260200180602001866000191660001916815260200185810385528e818151815260200191508051906020019080838360005b838110156101cd5780820151818401526020810190506101b2565b50505050905090810190601f1680156101fa5780820380516001836020036101000a031916815260200191505b5085810384528d818151815260200191508051906020019080838360005b83811015610233578082015181840152602081019050610218565b50505050905090810190601f1680156102605780820380516001836020036101000a031916815260200191505b5085810383528c818151815260200191508051906020019080838360005b8381101561029957808201518184015260208101905061027e565b50505050905090810190601f1680156102c65780820380516001836020036101000a031916815260200191505b50858103825287818151815260200191508051906020019080838360005b838110156102ff5780820151818401526020810190506102e4565b50505050905090810190601f16801561032c5780820380516001836020036101000a031916815260200191505b509e50505050505050505050505050505060405180910390f35b34801561035257600080fd5b506103716004803603810190808035906020019092919050505061166c565b005b34801561037f57600080fd5b5061039e600480360381019080803590602001909291905050506119df565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b838110156103e15780820151818401526020810190506103c6565b505050509050019250505060405180910390f35b34801561040157600080fd5b506104f260048036038101908080359060200190929190803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290505050611add565b604051808215151515815260200191505060405180910390f35b34801561051857600080fd5b50610521611d17565b6040518082815260200191505060405180910390f35b34801561054357600080fd5b5061054c611d1d565b6040518082815260200191505060405180910390f35b34801561056e57600080fd5b506105d360048036038101908080359060200190929190803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290505050611d23565b005b3480156105e157600080fd5b506106006004803603810190808035906020019092919050505061206a565b6040518082815260200191505060405180910390f35b34801561062257600080fd5b50610645600480360381019080803560001916906020019092919050505061208d565b604051808781526020018673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200185815260200180602001846000191660001916815260200180602001838103835286818151815260200191508051906020019080838360005b838110156106d55780820151818401526020810190506106ba565b50505050905090810190601f1680156107025780820380516001836020036101000a031916815260200191505b50838103825284818151815260200191508051906020019080838360005b8381101561073b578082015181840152602081019050610720565b50505050905090810190601f1680156107685780820380516001836020036101000a031916815260200191505b509850505050505050505060405180910390f35b34801561078857600080fd5b506107a7600480360381019080803590602001909291905050506122bd565b60405180806020018415151515815260200183151515158152602001828103825285818151815260200191508051906020019080838360005b838110156107fb5780820151818401526020810190506107e0565b50505050905090810190601f1680156108285780820380516001836020036101000a031916815260200191505b5094505050505060405180910390f35b34801561084457600080fd5b506108636004803603810190808035906020019092919050505061243b565b6040518085815260200180602001806020018460001916600019168152602001838103835286818151815260200191508051906020019080838360005b838110156108bb5780820151818401526020810190506108a0565b50505050905090810190601f1680156108e85780820380516001836020036101000a031916815260200191505b50838103825285818151815260200191508051906020019080838360005b83811015610921578082015181840152602081019050610906565b50505050905090810190601f16801561094e5780820380516001836020036101000a031916815260200191505b50965050505050505060405180910390f35b34801561096c57600080fd5b5061098f6004803603810190808035600019169060200190929190505050612642565b604051808781526020018673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200185815260200180602001846000191660001916815260200180602001838103835286818151815260200191508051906020019080838360005b83811015610a1f578082015181840152602081019050610a04565b50505050905090810190601f168015610a4c5780820380516001836020036101000a031916815260200191505b50838103825284818151815260200191508051906020019080838360005b83811015610a85578082015181840152602081019050610a6a565b50505050905090810190601f168015610ab25780820380516001836020036101000a031916815260200191505b509850505050505050505060405180910390f35b348015610ad257600080fd5b50610af36004803603810190808035151590602001909291905050506127ce565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b83811015610b36578082015181840152602081019050610b1b565b505050509050019250505060405180910390f35b348015610b5657600080fd5b50610b75600480360381019080803590602001909291905050506129a0565b6040518088815260200180602001806020018060200187815260200186600019166000191681526020018060200185810385528b818151815260200191508051906020019080838360005b83811015610bdb578082015181840152602081019050610bc0565b50505050905090810190601f168015610c085780820380516001836020036101000a031916815260200191505b5085810384528a818151815260200191508051906020019080838360005b83811015610c41578082015181840152602081019050610c26565b50505050905090810190601f168015610c6e5780820380516001836020036101000a031916815260200191505b50858103835289818151815260200191508051906020019080838360005b83811015610ca7578082015181840152602081019050610c8c565b50505050905090810190601f168015610cd45780820380516001836020036101000a031916815260200191505b50858103825286818151815260200191508051906020019080838360005b83811015610d0d578082015181840152602081019050610cf2565b50505050905090810190601f168015610d3a5780820380516001836020036101000a031916815260200191505b509b50505050505050505050505060405180910390f35b348015610d5d57600080fd5b50610d7c60048036038101908080359060200190929190505050612c42565b6040518088815260200180602001806020018060200187815260200186600019166000191681526020018060200185810385528b818151815260200191508051906020019080838360005b83811015610de2578082015181840152602081019050610dc7565b50505050905090810190601f168015610e0f5780820380516001836020036101000a031916815260200191505b5085810384528a818151815260200191508051906020019080838360005b83811015610e48578082015181840152602081019050610e2d565b50505050905090810190601f168015610e755780820380516001836020036101000a031916815260200191505b50858103835289818151815260200191508051906020019080838360005b83811015610eae578082015181840152602081019050610e93565b50505050905090810190601f168015610edb5780820380516001836020036101000a031916815260200191505b50858103825286818151815260200191508051906020019080838360005b83811015610f14578082015181840152602081019050610ef9565b50505050905090810190601f168015610f415780820380516001836020036101000a031916815260200191505b509b50505050505050505050505060405180910390f35b348015610f6457600080fd5b50610f6d612f8a565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681","5260200191505060405180910390f35b348015610fbb57600080fd5b50610fda60048036038101908080359060200190929190505050612faf565b6040518084815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561102657808201518184015260208101905061100b565b50505050905090810190601f1680156110535780820380516001836020036101000a031916815260200191505b5094505050505060405180910390f35b34801561106f57600080fd5b506111a660048036038101908080359060200190929190803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290505050613113565b604051808215151515815260200191505060405180910390f35b3480156111cc57600080fd5b506111eb600480360381019080803590602001909291905050506139ef565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b8381101561122e578082015181840152602081019050611213565b505050509050019250505060405180910390f35b34801561124e57600080fd5b50611335600480360381019080803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290505050613aee565b6040518082815260200191505060405180910390f35b34801561135757600080fd5b506113806004803603810190808035906020019092919080359060200190929190505050614014565b60405180826000191660001916815260200191505060405180910390f35b6001602052806000526040600020600091509050806000015490806001018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156114505780601f1061142557610100808354040283529160200191611450565b820191906000526020600020905b81548152906001019060200180831161143357829003601f168201915b505050505090806002018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156114ee5780601f106114c3576101008083540402835291602001916114ee565b820191906000526020600020905b8154815290600101906020018083116114d157829003601f168201915b505050505090806003018054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561158c5780601f106115615761010080835404028352916020019161158c565b820191906000526020600020905b81548152906001019060200180831161156f57829003601f168201915b5050505050908060040160009054906101000a900460ff16908060050154908060060160009054906101000a900460ff1690806007015490806008018054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561165c5780601f106116315761010080835404028352916020019161165c565b820191906000526020600020905b81548152906001019060200180831161163f57829003601f168201915b505050505090806009015490508a565b6000806000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611733576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f4f6e6c79206f776e65722063616e2063616c6c0000000000000000000000000081525060200191505060405180910390fd5b82600060016000838152602001908152602001600020600001541115156117c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f50726f6a656374206e6f7420657869737400000000000000000000000000000081525060200191505060405180910390fd5b836001600082815260200190815260200160002060060160009054906101000a900460ff1615151561185c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f50726f6a6563742064656c65746564000000000000000000000000000000000081525060200191505060405180910390fd5b6001600086815260200190815260200160002093508360040160009054906101000a900460ff161515156118f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f416c726561647920636f6d706c6574656400000000000000000000000000000081525060200191505060405180910390fd5b60018460040160006101000a81548160ff02191690831515021790555061198f856040805190810160405280600881526020017f434f4d504c4554450000000000000000000000000000000000000000000000008152506040805190810160405280601181526020017f50726f6a65637420636f6d706c657465640000000000000000000000000000008152508760090154614044565b92507ffdaadbce03659a279d1e2647184a79ad0141a276319d00b3acfac60d7037c44685846040518083815260200182600019166000191681526020019250505060405180910390a15050505050565b60608160006001600083815260200190815260200160002060000154111515611a70576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f50726f6a656374206e6f7420657869737400000000000000000000000000000081525060200191505060405180910390fd5b60016000848152602001908152602001600020600a01805480602002602001604051908101604052809291908181526020018280548015611ad057602002820191906000526020600020905b815481526020019060010190808311611abc575b5050505050915050919050565b6000808560006001600083815260200190815260200160002060000154111515611b6f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f50726f6a656374206e6f7420657869737400000000000000000000000000000081525060200191505060405180910390fd5b8585856040516020018084805190602001908083835b602083101515611baa5780518252602082019150602081019050602083039250611b85565b6001836020036101000a03801982511681845116808217855250505050505090500183805190602001908083835b602083101515611bfd5780518252602082019150602081019050602083039250611bd8565b6001836020036101000a03801982511681845116808217855250505050505090500182805190602001908083835b602083101515611c505780518252602082019150602081019050602083039250611c2b565b6001836020036101000a03801982511681845116808217855250505050505090500193505050506040516020818303038152906040526040518082805190602001908083835b602083101515611cbb5780518252602082019150602081019050602083039250611c96565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040518091039020915060016000888152602001908152602001600020600901546000191682600019161492505050949350505050565b60055481565b60065481565b6000806000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611dea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f4f6e6c79206f776e65722063616e2063616c6c0000000000000000000000000081525060200191505060405180910390fd5b8360006001600083815260200190815260200160002060000154111515611e79576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f50726f6a656374206e6f7420657869737400000000000000000000000000000081525060200191505060405180910390fd5b846001600082815260200190815260200160002060060160009054906101000a900460ff16151515611f13576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f50726f6a6563742064656c65746564000000000000000000000000000000000081525060200191505060405180910390fd5b60016000878152602001908152602001600020935060018460060160006101000a81548160ff02191690831515021790555042846007018190555084846008019080519060200190611f66929190614367565b50611fac866040805190810160405280600681526020017f44454c455445000000000000000000000000000000000000000000000000000081","5250878760090154614044565b92507f9d48c4605b2a9553ea244f2e26e66ee7ce60ca9e0c85b1472ca8049b92b96fbb86868560405180848152602001806020018360001916600019168152602001828103825284818151815260200191508051906020019080838360005b8381101561202657808201518184015260208101905061200b565b50505050905090810190601f1680156120535780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a1505050505050565b60048181548110151561207957fe5b906000526020600020016000915090505481565b60008060006060600060606000600360008960001916600019168152602001908152602001600020905060008160020154111515612133576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f5472616e73616374696f6e206e6f74206578697374000000000000000000000081525060200191505060405180910390fd5b80600001548160010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16826002015483600301846004015485600501828054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156122045780601f106121d957610100808354040283529160200191612204565b820191906000526020600020905b8154815290600101906020018083116121e757829003601f168201915b50505050509250808054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156122a05780601f10612275576101008083540402835291602001916122a0565b820191906000526020600020905b81548152906001019060200180831161228357829003601f168201915b505050505090509650965096509650965096505091939550919395565b606060008060008460006001600083815260200190815260200160002060000154111515612353576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f50726f6a656374206e6f7420657869737400000000000000000000000000000081525060200191505060405180910390fd5b600160008781526020019081526020016000209150816003018260040160009054906101000a900460ff168360060160009054906101000a900460ff16828054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156124255780601f106123fa57610100808354040283529160200191612425565b820191906000526020600020905b81548152906001019060200180831161240857829003601f168201915b5050505050925094509450945050509193909250565b600060608060008085600060016000838152602001908152602001600020600001541115156124d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f50726f6a656374206e6f7420657869737400000000000000000000000000000081525060200191505060405180910390fd5b600160008881526020019081526020016000209150816000015482600101836002018460090154828054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561258e5780601f106125635761010080835404028352916020019161258e565b820191906000526020600020905b81548152906001019060200180831161257157829003601f168201915b50505050509250818054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561262a5780601f106125ff5761010080835404028352916020019161262a565b820191906000526020600020905b81548152906001019060200180831161260d57829003601f168201915b50505050509150955095509550955050509193509193565b60036020528060005260406000206000915090508060000154908060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690806002015490806003018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156127205780601f106126f557610100808354040283529160200191612720565b820191906000526020600020905b81548152906001019060200180831161270357829003601f168201915b505050505090806004015490806005018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156127c45780601f10612799576101008083540402835291602001916127c4565b820191906000526020600020905b8154815290600101906020018083116127a757829003601f168201915b5050505050905086565b60608060008060606000861561283657600480548060200260200160405190810160405280929190818152602001828054801561282a57602002820191906000526020600020905b815481526020019060010190808311612816575b50505050509550612996565b60048054905060405190808252806020026020018201604052801561286a5781602001602082028038833980820191505090505b50945060009350600092505b600480549050831015612912576001600060048581548110151561289657fe5b9060005260206000200154815260200190815260200160002060060160009054906101000a900460ff161515612905576004838154811015156128d557fe5b906000526020600020015485858151811015156128ee57fe5b906020019060200201818152505083806001019450505b8280600101935050612876565b836040519080825280602002602001820160405280156129415781602001602082028038833980820191505090505b509150600090505b8381101561299257848181518110151561295f57fe5b90602001906020020151828281518110151561297757fe5b90602001906020020181815250508080600101915050612949565b8195505b5050505050919050565b6002602052806000526040600020600091509050806000015490806001018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015612a525780601f10612a2757610100808354040283529160200191612a52565b820191906000526020600020905b815481529060010190602001808311612a3557829003601f168201915b505050505090806002018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015612af05780601f10612ac557610100808354040283529160200191612af0565b820191906000526020600020905b815481529060010190602001808311612ad357829003601f168201915b505050505090806003018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015612b8e5780601f10612b6357610100808354040283529160200191612b8e565b820191906000526020600020905b815481529060010190602001808311612b7157829003601f168201915b505050505090806004015490806005015490806006018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015612c385780601f10612c0d57610100808354040283529160200191612c38565b820191906000526020600020905b815481529060010190602001808311612c1b57829003601f168201915b5050505050905087565b6000606080606060008060606000600260008a8152602001908152602001600020905060008160040154111515612ce1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f486973746f7279207265636f7264206e6f74206578697374000000000000000081525060200191505060405180910390fd5b80600001548160010182600201836003018460040154856005015486600601858054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015612d955780601f10612d6a57610100808354040283529160200191612d95565b820191906000526020600020905b815481529060010190602001808311612d7857829003601f168201915b50505050509550848054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015612e315780601f10612e0657610100808354040283529160200191612e31565b820191906000526020600020905b815481529060010190602001808311612e1457829003601f168201915b50505050509450838054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015612ecd5780601f10612ea257610100808354040283529160200191612ecd565b820191906000526020600020905b815481529060010190602001808311612eb057829003601f168201915b50505050509350808054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015612f695780601f10612f3e57610100808354040283529160200191612f69565b820191906000526020600020905b815481529060010190602001808311612f4c57829003601f168201915b50505050509050975097509750975097509750975050919395979092949650565b6000809054906101000a900473ffffffffffffffff","ffffffffffffffffffffffff1681565b600080606060008460006001600083815260200190815260200160002060000154111515613045576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f50726f6a656374206e6f7420657869737400000000000000000000000000000081525060200191505060405180910390fd5b6001600087815260200190815260200160002091508160050154826007015483600801808054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156130fd5780601f106130d2576101008083540402835291602001916130fd565b820191906000526020600020905b8154815290600101906020018083116130e057829003601f168201915b5050505050905094509450945050509193909250565b60008060008060008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156131df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f4f6e6c79206f776e65722063616e2063616c6c0000000000000000000000000081525060200191505060405180910390fd5b896000600160008381526020019081526020016000206000015411151561326e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f50726f6a656374206e6f7420657869737400000000000000000000000000000081525060200191505060405180910390fd5b8a6001600082815260200190815260200160002060060160009054906101000a900460ff16151515613308576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f50726f6a6563742064656c65746564000000000000000000000000000000000081525060200191505060405180910390fd5b60008b51111515613381576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f5469746c652063616e6e6f7420626520656d707479000000000000000000000081525060200191505060405180910390fd5b600088511115156133fa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f55706461746520726561736f6e2063616e6e6f7420626520656d70747900000081525060200191505060405180910390fd5b600160008d81526020019081526020016000209550600660008154809291906001019190505550600654945060e0604051908101604052808d8152602001876001018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156134d05780601f106134a5576101008083540402835291602001916134d0565b820191906000526020600020905b8154815290600101906020018083116134b357829003601f168201915b50505050508152602001876002018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156135725780601f1061354757610100808354040283529160200191613572565b820191906000526020600020905b81548152906001019060200180831161355557829003601f168201915b50505050508152602001876003018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156136145780601f106135e957610100808354040283529160200191613614565b820191906000526020600020905b8154815290600101906020018083116135f757829003601f168201915b505050505081526020014281526020018760090154600019168152602001898152506002600087815260200190815260200160002060008201518160000155602082015181600101908051906020019061366f9291906143e7565b50604082015181600201908051906020019061368c9291906143e7565b5060608201518160030190805190602001906136a99291906143e7565b506080820151816004015560a0820151816005019060001916905560c08201518160060190805190602001906136e09291906143e7565b5090505085600a018590806001815401808255809150509060018203906000526020600020016000909192909190915055508a86600101908051906020019061372a929190614367565b5089866002019080519060200190613743929190614367565b508886600301908051906020019061375c929190614367565b508a8a8a6040516020018084805190602001908083835b6020831015156137985780518252602082019150602081019050602083039250613773565b6001836020036101000a03801982511681845116808217855250505050505090500183805190602001908083835b6020831015156137eb57805182526020820191506020810190506020830392506137c6565b6001836020036101000a03801982511681845116808217855250505050505090500182805190602001908083835b60208310151561383e5780518252602082019150602081019050602083039250613819565b6001836020036101000a03801982511681845116808217855250505050505090500193505050506040516020818303038152906040526040518082805190602001908083835b6020831015156138a95780518252602082019150602081019050602083039250613884565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405180910390209350838660090181600019169055506139268c6040805190810160405280600681526020017f55504441544500000000000000000000000000000000000000000000000000008152508a87614044565b92507f2363f1d37e6b6a37fe9badaeab4b64dc80f4681c1853b7ef54da1522826da3168c8c8560405180848152602001806020018360001916600019168152602001828103825284818151815260200191508051906020019080838360005b838110156139a0578082015181840152602081019050613985565b50505050905090810190601f1680156139cd5780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a16001965050505050505095945050505050565b60608160006001600083815260200190815260200160002060000154111515613a80576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f50726f6a656374206e6f7420657869737400000000000000000000000000000081525060200191505060405180910390fd5b60076000848152602001908152602001600020805480602002602001604051908101604052809291908181526020018280548015613ae157602002820191906000526020600020905b81546000191681526020019060010190808311613ac9575b5050505050915050919050565b60008060008060008751111515613b6d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f5469746c652063616e6e6f7420626520656d707479000000000000000000000081525060200191505060405180910390fd5b60056000815480929190600101919050555060055492508686866040516020018084805190602001908083835b602083101515613bbf5780518252602082019150602081019050602083039250613b9a565b6001836020036101000a03801982511681845116808217855250505050505090500183805190602001908083835b602083101515613c125780518252602082019150602081019050602083039250613bed565b6001836020036101000a03801982511681845116808217855250505050505090500182805190602001908083835b602083101515613c655780518252602082019150602081019050602083039250613c40565b6001836020036101000a03801982511681845116808217855250505050505090500193505050506040516020818303038152906040526040518082805190602001908083835b602083101515613cd05780518252602082019150602081019050602083039250613cab565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405180910390209150610160604051908101604052808481526020018881526020018781526020018681526020016000151581526020014281526020016000151581526020016000815260200160206040519081016040528060008152508152602001836000191681526020016000604051908082528060200260200182016040528015613d935781602001602082028038833980820191505090505b5081525060016000858152602001908152602001600020600082015181600001556020820151816001019080519060200190613dd09291906143e7565b506040820151816002019080519060200190613ded9291906143e7565b506060820151816003019080519060200190613e0a9291906143e7565b5060808201518160040160006101000a81548160ff02191690831515021790555060a0820151816005015560c08201518160060160006101000a81548160ff02191690831515021790555060e08201518160070155610100820151816008019080519060200190613e7c9291906143e7565b50610120820151816009019060001916905561014082015181600a019080519060200190613eab929190614467565b509050506004839080600181540180825580915050906001820390600052602060002001600090919290919091505550613f51836040805190810160405280600681526020017f43524541544500000000000000000000000000000000000000000000000000008152506040805190810160405280600f81526020017f50726f6a6563742063726561746564000000000000000000000000000000000081525085614044565b90507f6a34c038ae6398de35aabbc9f68345b2904fe4ff30c349f65d7f994887d59c0c83888360405180848152602001806020018360001916600019168152602001828103825284818151815260","200191508051906020019080838360005b83811015613fcb578082015181840152602081019050613fb0565b50505050905090810190601f168015613ff85780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a18293505050509392505050565b60076020528160005260406000208181548110151561402f57fe5b90600052602060002001600091509150505481565b60008085334287604051602001808581526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c0100000000000000000000000002815260140183815260200182805190602001908083835b6020831015156140d057805182526020820191506020810190506020830392506140ab565b6001836020036101000a0380198251168184511680821785525050505050509050019450505050506040516020818303038152906040526040518082805190602001908083835b60208310151561413c5780518252602082019150602081019050602083039250614117565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040518091039020905060c0604051908101604052808781526020013373ffffffffffffffffffffffffffffffffffffffff16815260200142815260200186815260200184600019168152602001858152506003600083600019166000191681526020019081526020016000206000820151816000015560208201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506040820151816002015560608201518160030190805190602001906142459291906143e7565b506080820151816004019060001916905560a08201518160050190805190602001906142729291906143e7565b50905050600760008781526020019081526020016000208190806001815401808255809150509060018203906000526020600020016000909192909190915090600019169055508581600019167fef80afcf11b675199b4f80123e4d537a7a4cf4aeef02eb743a57976370f3c703876040518080602001828103825283818151815260200191508051906020019080838360005b83811015614321578082015181840152602081019050614306565b50505050905090810190601f16801561434e5780820380516001836020036101000a031916815260200191505b509250505060405180910390a380915050949350505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106143a857805160ff19168380011785556143d6565b828001600101855582156143d6579182015b828111156143d55782518255916020019190600101906143ba565b5b5090506143e391906144b4565b5090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061442857805160ff1916838001178555614456565b82800160010185558215614456579182015b8281111561445557825182559160200191906001019061443a565b5b50905061446391906144b4565b5090565b8280548282559060005260206000209081019282156144a3579160200282015b828111156144a2578251825591602001919060010190614487565b5b5090506144b091906144b4565b5090565b6144d691905b808211156144d25760008160009055506001016144ba565b5090565b905600a165627a7a72305820dfe7e16fbbaea760576507a2123e59007535406f1a76fe17c06903acc498f3400029"};

    public static final String BINARY = org.fisco.bcos.sdk.utils.StringUtils.joinAll("", BINARY_ARRAY);

    public static final String[] SM_BINARY_ARRAY = {};

    public static final String SM_BINARY = org.fisco.bcos.sdk.utils.StringUtils.joinAll("", SM_BINARY_ARRAY);

    public static final String[] ABI_ARRAY = {"[{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"projects\",\"outputs\":[{\"name\":\"id\",\"type\":\"uint256\"},{\"name\":\"title\",\"type\":\"string\"},{\"name\":\"description\",\"type\":\"string\"},{\"name\":\"researcherInfo\",\"type\":\"string\"},{\"name\":\"completed\",\"type\":\"bool\"},{\"name\":\"creationTime\",\"type\":\"uint256\"},{\"name\":\"isDeleted\",\"type\":\"bool\"},{\"name\":\"deletionTime\",\"type\":\"uint256\"},{\"name\":\"deletionReason\",\"type\":\"string\"},{\"name\":\"dataHash\",\"type\":\"bytes32\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_projectId\",\"type\":\"uint256\"}],\"name\":\"completeProject\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_projectId\",\"type\":\"uint256\"}],\"name\":\"getProjectHistoryIds\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256[]\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_projectId\",\"type\":\"uint256\"},{\"name\":\"_title\",\"type\":\"string\"},{\"name\":\"_description\",\"type\":\"string\"},{\"name\":\"_researcherInfo\",\"type\":\"string\"}],\"name\":\"verifyProjectHash\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"projectCount\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"historyCount\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_projectId\",\"type\":\"uint256\"},{\"name\":\"_reason\",\"type\":\"string\"}],\"name\":\"deleteProject\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"projectIds\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_txHash\",\"type\":\"bytes32\"}],\"name\":\"getTransactionDetails\",\"outputs\":[{\"name\":\"projectId\",\"type\":\"uint256\"},{\"name\":\"operator\",\"type\":\"address\"},{\"name\":\"timestamp\",\"type\":\"uint256\"},{\"name\":\"actionType\",\"type\":\"string\"},{\"name\":\"dataHash\",\"type\":\"bytes32\"},{\"name\":\"details\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_projectId\",\"type\":\"uint256\"}],\"name\":\"getProjectBasic2\",\"outputs\":[{\"name\":\"researcherInfo\",\"type\":\"string\"},{\"name\":\"completed\",\"type\":\"bool\"},{\"name\":\"isDeleted\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_projectId\",\"type\":\"uint256\"}],\"name\":\"getProjectBasic1\",\"outputs\":[{\"name\":\"id\",\"type\":\"uint256\"},{\"name\":\"title\",\"type\":\"string\"},{\"name\":\"description\",\"type\":\"string\"},{\"name\":\"dataHash\",\"type\":\"bytes32\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"transactions\",\"outputs\":[{\"name\":\"projectId\",\"type\":\"uint256\"},{\"name\":\"operator\",\"type\":\"address\"},{\"name\":\"timestamp\",\"type\":\"uint256\"},{\"name\":\"actionType\",\"type\":\"string\"},{\"name\":\"dataHash\",\"type\":\"bytes32\"},{\"name\":\"details\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"includeDeleted\",\"type\":\"bool\"}],\"name\":\"getAllProjectIds\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256[]\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"projectHistories\",\"outputs\":[{\"name\":\"originalId\",\"type\":\"uint256\"},{\"name\":\"title\",\"type\":\"string\"},{\"name\":\"description\",\"type\":\"string\"},{\"name\":\"researcherInfo\",\"type\":\"string\"},{\"name\":\"updateTime\",\"type\":\"uint256\"},{\"name\":\"dataHash\",\"type\":\"bytes32\"},{\"name\":\"updateReason\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_historyId\",\"type\":\"uint256\"}],\"name\":\"getProjectHistoryDetails\",\"outputs\":[{\"name\":\"originalId\",\"type\":\"uint256\"},{\"name\":\"title\",\"type\":\"string\"},{\"name\":\"description\",\"type\":\"string\"},{\"name\":\"researcherInfo\",\"type\":\"string\"},{\"name\":\"updateTime\",\"type\":\"uint256\"},{\"name\":\"dataHash\",\"type\":\"bytes32\"},{\"name\":\"updateReason\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_projectId\",\"type\":\"uint256\"}],\"name\":\"getProjectTimes\",\"outputs\":[{\"name\":\"creationTime\",\"type\":\"uint256\"},{\"name\":\"deletionTime\",\"type\":\"uint256\"},{\"name\":\"deletionReason\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_projectId\",\"type\":\"uint256\"},{\"name\":\"_title\",\"type\":\"string\"},{\"name\":\"_description\",\"type\":\"string\"},{\"name\":\"_researcherInfo\",\"type\":\"string\"},{\"name\":\"_updateReason\",\"type\":\"string\"}],\"name\":\"updateProject\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_projectId\",\"type\":\"uint256\"}],\"name\":\"getProjectTransactions\",\"outputs\":[{\"name\":\"\",\"type\":\"bytes32[]\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_title\",\"type\":\"string\"},{\"name\":\"_description\",\"type\":\"string\"},{\"name\":\"_researcherInfo\",\"type\":\"string\"}],\"name\":\"createProject\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"uint256\"},{\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"projectTransactions\",\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"projectId\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"title\",\"type\":\"string\"},{\"indexed\":false,\"name\":\"txHash\",\"type\":\"bytes32\"}],\"name\":\"ProjectCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"projectId\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"title\",\"type\":\"string\"},{\"indexed\":false,\"name\":\"txHash\",\"type\":\"bytes32\"}],\"name\":\"ProjectUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"projectId\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"txHash\",\"type\":\"bytes32\"}],\"name\":\"ProjectCompleted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"projectId\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"reason\",\"type\":\"string\"},{\"indexed\":false,\"name\":\"txHash\",\"type\":\"bytes32\"}],\"name\":\"ProjectDeleted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"txHash\",\"type\":\"bytes32\"},{\"indexed\":true,\"name\":\"projectId\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"actionType\",\"type\":\"string\"}],\"name\":\"TransactionRecorded\",\"type\":\"event\"}]"};

    public static final String ABI = org.fisco.bcos.sdk.utils.StringUtils.joinAll("", ABI_ARRAY);

    public static final String FUNC_PROJECTS = "projects";

    public static final String FUNC_COMPLETEPROJECT = "completeProject";

    public static final String FUNC_GETPROJECTHISTORYIDS = "getProjectHistoryIds";

    public static final String FUNC_VERIFYPROJECTHASH = "verifyProjectHash";

    public static final String FUNC_PROJECTCOUNT = "projectCount";

    public static final String FUNC_HISTORYCOUNT = "historyCount";

    public static final String FUNC_DELETEPROJECT = "deleteProject";

    public static final String FUNC_PROJECTIDS = "projectIds";

    public static final String FUNC_GETTRANSACTIONDETAILS = "getTransactionDetails";

    public static final String FUNC_GETPROJECTBASIC2 = "getProjectBasic2";

    public static final String FUNC_GETPROJECTBASIC1 = "getProjectBasic1";

    public static final String FUNC_TRANSACTIONS = "transactions";

    public static final String FUNC_GETALLPROJECTIDS = "getAllProjectIds";

    public static final String FUNC_PROJECTHISTORIES = "projectHistories";

    public static final String FUNC_GETPROJECTHISTORYDETAILS = "getProjectHistoryDetails";

    public static final String FUNC_OWNER = "owner";

    public static final String FUNC_GETPROJECTTIMES = "getProjectTimes";

    public static final String FUNC_UPDATEPROJECT = "updateProject";

    public static final String FUNC_GETPROJECTTRANSACTIONS = "getProjectTransactions";

    public static final String FUNC_CREATEPROJECT = "createProject";

    public static final String FUNC_PROJECTTRANSACTIONS = "projectTransactions";

    public static final Event PROJECTCREATED_EVENT = new Event("ProjectCreated", 
            Arrays.<TypeReference<?>>asList(new TypeReference<Uint256>() {}, new TypeReference<Utf8String>() {}, new TypeReference<Bytes32>() {}));
    ;

    public static final Event PROJECTUPDATED_EVENT = new Event("ProjectUpdated", 
            Arrays.<TypeReference<?>>asList(new TypeReference<Uint256>() {}, new TypeReference<Utf8String>() {}, new TypeReference<Bytes32>() {}));
    ;

    public static final Event PROJECTCOMPLETED_EVENT = new Event("ProjectCompleted", 
            Arrays.<TypeReference<?>>asList(new TypeReference<Uint256>() {}, new TypeReference<Bytes32>() {}));
    ;

    public static final Event PROJECTDELETED_EVENT = new Event("ProjectDeleted", 
            Arrays.<TypeReference<?>>asList(new TypeReference<Uint256>() {}, new TypeReference<Utf8String>() {}, new TypeReference<Bytes32>() {}));
    ;

    public static final Event TRANSACTIONRECORDED_EVENT = new Event("TransactionRecorded", 
            Arrays.<TypeReference<?>>asList(new TypeReference<Bytes32>(true) {}, new TypeReference<Uint256>(true) {}, new TypeReference<Utf8String>() {}));
    ;

    protected MedicalCrowdsourcing(String contractAddress, Client client, CryptoKeyPair credential) {
        super(getBinary(client.getCryptoSuite()), contractAddress, client, credential);
    }

    public static String getBinary(CryptoSuite cryptoSuite) {
        return (cryptoSuite.getCryptoTypeConfig() == CryptoType.ECDSA_TYPE ? BINARY : SM_BINARY);
    }

    public Tuple10<BigInteger, String, String, String, Boolean, BigInteger, Boolean, BigInteger, String, byte[]> projects(BigInteger param0) throws ContractException {
        final Function function = new Function(FUNC_PROJECTS, 
                Arrays.<Type>asList(new org.fisco.bcos.sdk.abi.datatypes.generated.Uint256(param0)), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Uint256>() {}, new TypeReference<Utf8String>() {}, new TypeReference<Utf8String>() {}, new TypeReference<Utf8String>() {}, new TypeReference<Bool>() {}, new TypeReference<Uint256>() {}, new TypeReference<Bool>() {}, new TypeReference<Uint256>() {}, new TypeReference<Utf8String>() {}, new TypeReference<Bytes32>() {}));
        List<Type> results = executeCallWithMultipleValueReturn(function);
        return new Tuple10<BigInteger, String, String, String, Boolean, BigInteger, Boolean, BigInteger, String, byte[]>(
                (BigInteger) results.get(0).getValue(), 
                (String) results.get(1).getValue(), 
                (String) results.get(2).getValue(), 
                (String) results.get(3).getValue(), 
                (Boolean) results.get(4).getValue(), 
                (BigInteger) results.get(5).getValue(), 
                (Boolean) results.get(6).getValue(), 
                (BigInteger) results.get(7).getValue(), 
                (String) results.get(8).getValue(), 
                (byte[]) results.get(9).getValue());
    }

    public TransactionReceipt completeProject(BigInteger _projectId) {
        final Function function = new Function(
                FUNC_COMPLETEPROJECT, 
                Arrays.<Type>asList(new org.fisco.bcos.sdk.abi.datatypes.generated.Uint256(_projectId)), 
                Collections.<TypeReference<?>>emptyList());
        return executeTransaction(function);
    }

//    public byte[] completeProject(BigInteger _projectId, TransactionCallback callback) {
//        final Function function = new Function(
//                FUNC_COMPLETEPROJECT,
//                Arrays.<Type>asList(new org.fisco.bcos.sdk.abi.datatypes.generated.Uint256(_projectId)),
//                Collections.<TypeReference<?>>emptyList());
//        return asyncExecuteTransaction(function, callback);
//    }

    public String getSignedTransactionForCompleteProject(BigInteger _projectId) {
        final Function function = new Function(
                FUNC_COMPLETEPROJECT, 
                Arrays.<Type>asList(new org.fisco.bcos.sdk.abi.datatypes.generated.Uint256(_projectId)), 
                Collections.<TypeReference<?>>emptyList());
        return createSignedTransaction(function);
    }

    public Tuple1<BigInteger> getCompleteProjectInput(TransactionReceipt transactionReceipt) {
        String data = transactionReceipt.getInput().substring(10);
        final Function function = new Function(FUNC_COMPLETEPROJECT, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Uint256>() {}));
        List<Type> results = FunctionReturnDecoder.decode(data, function.getOutputParameters());
        return new Tuple1<BigInteger>(

                (BigInteger) results.get(0).getValue()
                );
    }

    public List getProjectHistoryIds(BigInteger _projectId) throws ContractException {
        final Function function = new Function(FUNC_GETPROJECTHISTORYIDS, 
                Arrays.<Type>asList(new org.fisco.bcos.sdk.abi.datatypes.generated.Uint256(_projectId)), 
                Arrays.<TypeReference<?>>asList(new TypeReference<DynamicArray<Uint256>>() {}));
        List<Type> result = (List<Type>) executeCallWithSingleValueReturn(function, List.class);
        return convertToNative(result);
    }

    public Boolean verifyProjectHash(BigInteger _projectId, String _title, String _description, String _researcherInfo) throws ContractException {
        final Function function = new Function(FUNC_VERIFYPROJECTHASH, 
                Arrays.<Type>asList(new org.fisco.bcos.sdk.abi.datatypes.generated.Uint256(_projectId), 
                new org.fisco.bcos.sdk.abi.datatypes.Utf8String(_title), 
                new org.fisco.bcos.sdk.abi.datatypes.Utf8String(_description), 
                new org.fisco.bcos.sdk.abi.datatypes.Utf8String(_researcherInfo)), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Bool>() {}));
        return executeCallWithSingleValueReturn(function, Boolean.class);
    }

    public BigInteger projectCount() throws ContractException {
        final Function function = new Function(FUNC_PROJECTCOUNT, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Uint256>() {}));
        return executeCallWithSingleValueReturn(function, BigInteger.class);
    }

    public BigInteger historyCount() throws ContractException {
        final Function function = new Function(FUNC_HISTORYCOUNT, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Uint256>() {}));
        return executeCallWithSingleValueReturn(function, BigInteger.class);
    }

    public TransactionReceipt deleteProject(BigInteger _projectId, String _reason) {
        final Function function = new Function(
                FUNC_DELETEPROJECT, 
                Arrays.<Type>asList(new org.fisco.bcos.sdk.abi.datatypes.generated.Uint256(_projectId), 
                new org.fisco.bcos.sdk.abi.datatypes.Utf8String(_reason)), 
                Collections.<TypeReference<?>>emptyList());
        return executeTransaction(function);
    }

//    public byte[] deleteProject(BigInteger _projectId, String _reason, TransactionCallback callback) {
//        final Function function = new Function(
//                FUNC_DELETEPROJECT,
//                Arrays.<Type>asList(new org.fisco.bcos.sdk.abi.datatypes.generated.Uint256(_projectId),
//                new org.fisco.bcos.sdk.abi.datatypes.Utf8String(_reason)),
//                Collections.<TypeReference<?>>emptyList());
//        return asyncExecuteTransaction(function, callback);
//    }

    public String getSignedTransactionForDeleteProject(BigInteger _projectId, String _reason) {
        final Function function = new Function(
                FUNC_DELETEPROJECT, 
                Arrays.<Type>asList(new org.fisco.bcos.sdk.abi.datatypes.generated.Uint256(_projectId), 
                new org.fisco.bcos.sdk.abi.datatypes.Utf8String(_reason)), 
                Collections.<TypeReference<?>>emptyList());
        return createSignedTransaction(function);
    }

    public Tuple2<BigInteger, String> getDeleteProjectInput(TransactionReceipt transactionReceipt) {
        String data = transactionReceipt.getInput().substring(10);
        final Function function = new Function(FUNC_DELETEPROJECT, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Uint256>() {}, new TypeReference<Utf8String>() {}));
        List<Type> results = FunctionReturnDecoder.decode(data, function.getOutputParameters());
        return new Tuple2<BigInteger, String>(

                (BigInteger) results.get(0).getValue(), 
                (String) results.get(1).getValue()
                );
    }

    public BigInteger projectIds(BigInteger param0) throws ContractException {
        final Function function = new Function(FUNC_PROJECTIDS, 
                Arrays.<Type>asList(new org.fisco.bcos.sdk.abi.datatypes.generated.Uint256(param0)), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Uint256>() {}));
        return executeCallWithSingleValueReturn(function, BigInteger.class);
    }

    public Tuple6<BigInteger, String, BigInteger, String, byte[], String> getTransactionDetails(byte[] _txHash) throws ContractException {
        final Function function = new Function(FUNC_GETTRANSACTIONDETAILS, 
                Arrays.<Type>asList(new org.fisco.bcos.sdk.abi.datatypes.generated.Bytes32(_txHash)), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Uint256>() {}, new TypeReference<Address>() {}, new TypeReference<Uint256>() {}, new TypeReference<Utf8String>() {}, new TypeReference<Bytes32>() {}, new TypeReference<Utf8String>() {}));
        List<Type> results = executeCallWithMultipleValueReturn(function);
        return new Tuple6<BigInteger, String, BigInteger, String, byte[], String>(
                (BigInteger) results.get(0).getValue(), 
                (String) results.get(1).getValue(), 
                (BigInteger) results.get(2).getValue(), 
                (String) results.get(3).getValue(), 
                (byte[]) results.get(4).getValue(), 
                (String) results.get(5).getValue());
    }

    public Tuple3<String, Boolean, Boolean> getProjectBasic2(BigInteger _projectId) throws ContractException {
        final Function function = new Function(FUNC_GETPROJECTBASIC2, 
                Arrays.<Type>asList(new org.fisco.bcos.sdk.abi.datatypes.generated.Uint256(_projectId)), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Utf8String>() {}, new TypeReference<Bool>() {}, new TypeReference<Bool>() {}));
        List<Type> results = executeCallWithMultipleValueReturn(function);
        return new Tuple3<String, Boolean, Boolean>(
                (String) results.get(0).getValue(), 
                (Boolean) results.get(1).getValue(), 
                (Boolean) results.get(2).getValue());
    }

    public Tuple4<BigInteger, String, String, byte[]> getProjectBasic1(BigInteger _projectId) throws ContractException {
        final Function function = new Function(FUNC_GETPROJECTBASIC1, 
                Arrays.<Type>asList(new org.fisco.bcos.sdk.abi.datatypes.generated.Uint256(_projectId)), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Uint256>() {}, new TypeReference<Utf8String>() {}, new TypeReference<Utf8String>() {}, new TypeReference<Bytes32>() {}));
        List<Type> results = executeCallWithMultipleValueReturn(function);
        return new Tuple4<BigInteger, String, String, byte[]>(
                (BigInteger) results.get(0).getValue(), 
                (String) results.get(1).getValue(), 
                (String) results.get(2).getValue(), 
                (byte[]) results.get(3).getValue());
    }

    public Tuple6<BigInteger, String, BigInteger, String, byte[], String> transactions(byte[] param0) throws ContractException {
        final Function function = new Function(FUNC_TRANSACTIONS, 
                Arrays.<Type>asList(new org.fisco.bcos.sdk.abi.datatypes.generated.Bytes32(param0)), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Uint256>() {}, new TypeReference<Address>() {}, new TypeReference<Uint256>() {}, new TypeReference<Utf8String>() {}, new TypeReference<Bytes32>() {}, new TypeReference<Utf8String>() {}));
        List<Type> results = executeCallWithMultipleValueReturn(function);
        return new Tuple6<BigInteger, String, BigInteger, String, byte[], String>(
                (BigInteger) results.get(0).getValue(), 
                (String) results.get(1).getValue(), 
                (BigInteger) results.get(2).getValue(), 
                (String) results.get(3).getValue(), 
                (byte[]) results.get(4).getValue(), 
                (String) results.get(5).getValue());
    }

    public List getAllProjectIds(Boolean includeDeleted) throws ContractException {
        final Function function = new Function(FUNC_GETALLPROJECTIDS, 
                Arrays.<Type>asList(new org.fisco.bcos.sdk.abi.datatypes.Bool(includeDeleted)), 
                Arrays.<TypeReference<?>>asList(new TypeReference<DynamicArray<Uint256>>() {}));
        List<Type> result = (List<Type>) executeCallWithSingleValueReturn(function, List.class);
        return convertToNative(result);
    }

    public Tuple7<BigInteger, String, String, String, BigInteger, byte[], String> projectHistories(BigInteger param0) throws ContractException {
        final Function function = new Function(FUNC_PROJECTHISTORIES, 
                Arrays.<Type>asList(new org.fisco.bcos.sdk.abi.datatypes.generated.Uint256(param0)), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Uint256>() {}, new TypeReference<Utf8String>() {}, new TypeReference<Utf8String>() {}, new TypeReference<Utf8String>() {}, new TypeReference<Uint256>() {}, new TypeReference<Bytes32>() {}, new TypeReference<Utf8String>() {}));
        List<Type> results = executeCallWithMultipleValueReturn(function);
        return new Tuple7<BigInteger, String, String, String, BigInteger, byte[], String>(
                (BigInteger) results.get(0).getValue(), 
                (String) results.get(1).getValue(), 
                (String) results.get(2).getValue(), 
                (String) results.get(3).getValue(), 
                (BigInteger) results.get(4).getValue(), 
                (byte[]) results.get(5).getValue(), 
                (String) results.get(6).getValue());
    }

    public Tuple7<BigInteger, String, String, String, BigInteger, byte[], String> getProjectHistoryDetails(BigInteger _historyId) throws ContractException {
        final Function function = new Function(FUNC_GETPROJECTHISTORYDETAILS, 
                Arrays.<Type>asList(new org.fisco.bcos.sdk.abi.datatypes.generated.Uint256(_historyId)), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Uint256>() {}, new TypeReference<Utf8String>() {}, new TypeReference<Utf8String>() {}, new TypeReference<Utf8String>() {}, new TypeReference<Uint256>() {}, new TypeReference<Bytes32>() {}, new TypeReference<Utf8String>() {}));
        List<Type> results = executeCallWithMultipleValueReturn(function);
        return new Tuple7<BigInteger, String, String, String, BigInteger, byte[], String>(
                (BigInteger) results.get(0).getValue(), 
                (String) results.get(1).getValue(), 
                (String) results.get(2).getValue(), 
                (String) results.get(3).getValue(), 
                (BigInteger) results.get(4).getValue(), 
                (byte[]) results.get(5).getValue(), 
                (String) results.get(6).getValue());
    }

    public String owner() throws ContractException {
        final Function function = new Function(FUNC_OWNER, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Address>() {}));
        return executeCallWithSingleValueReturn(function, String.class);
    }

    public Tuple3<BigInteger, BigInteger, String> getProjectTimes(BigInteger _projectId) throws ContractException {
        final Function function = new Function(FUNC_GETPROJECTTIMES, 
                Arrays.<Type>asList(new org.fisco.bcos.sdk.abi.datatypes.generated.Uint256(_projectId)), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Uint256>() {}, new TypeReference<Uint256>() {}, new TypeReference<Utf8String>() {}));
        List<Type> results = executeCallWithMultipleValueReturn(function);
        return new Tuple3<BigInteger, BigInteger, String>(
                (BigInteger) results.get(0).getValue(), 
                (BigInteger) results.get(1).getValue(), 
                (String) results.get(2).getValue());
    }

    public TransactionReceipt updateProject(BigInteger _projectId, String _title, String _description, String _researcherInfo, String _updateReason) {
        final Function function = new Function(
                FUNC_UPDATEPROJECT, 
                Arrays.<Type>asList(new org.fisco.bcos.sdk.abi.datatypes.generated.Uint256(_projectId), 
                new org.fisco.bcos.sdk.abi.datatypes.Utf8String(_title), 
                new org.fisco.bcos.sdk.abi.datatypes.Utf8String(_description), 
                new org.fisco.bcos.sdk.abi.datatypes.Utf8String(_researcherInfo), 
                new org.fisco.bcos.sdk.abi.datatypes.Utf8String(_updateReason)), 
                Collections.<TypeReference<?>>emptyList());
        return executeTransaction(function);
    }

//    public byte[] updateProject(BigInteger _projectId, String _title, String _description, String _researcherInfo, String _updateReason, TransactionCallback callback) {
//        final Function function = new Function(
//                FUNC_UPDATEPROJECT,
//                Arrays.<Type>asList(new org.fisco.bcos.sdk.abi.datatypes.generated.Uint256(_projectId),
//                new org.fisco.bcos.sdk.abi.datatypes.Utf8String(_title),
//                new org.fisco.bcos.sdk.abi.datatypes.Utf8String(_description),
//                new org.fisco.bcos.sdk.abi.datatypes.Utf8String(_researcherInfo),
//                new org.fisco.bcos.sdk.abi.datatypes.Utf8String(_updateReason)),
//                Collections.<TypeReference<?>>emptyList());
//        return asyncExecuteTransaction(function, callback);
//    }

    public String getSignedTransactionForUpdateProject(BigInteger _projectId, String _title, String _description, String _researcherInfo, String _updateReason) {
        final Function function = new Function(
                FUNC_UPDATEPROJECT, 
                Arrays.<Type>asList(new org.fisco.bcos.sdk.abi.datatypes.generated.Uint256(_projectId), 
                new org.fisco.bcos.sdk.abi.datatypes.Utf8String(_title), 
                new org.fisco.bcos.sdk.abi.datatypes.Utf8String(_description), 
                new org.fisco.bcos.sdk.abi.datatypes.Utf8String(_researcherInfo), 
                new org.fisco.bcos.sdk.abi.datatypes.Utf8String(_updateReason)), 
                Collections.<TypeReference<?>>emptyList());
        return createSignedTransaction(function);
    }

    public Tuple5<BigInteger, String, String, String, String> getUpdateProjectInput(TransactionReceipt transactionReceipt) {
        String data = transactionReceipt.getInput().substring(10);
        final Function function = new Function(FUNC_UPDATEPROJECT, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Uint256>() {}, new TypeReference<Utf8String>() {}, new TypeReference<Utf8String>() {}, new TypeReference<Utf8String>() {}, new TypeReference<Utf8String>() {}));
        List<Type> results = FunctionReturnDecoder.decode(data, function.getOutputParameters());
        return new Tuple5<BigInteger, String, String, String, String>(

                (BigInteger) results.get(0).getValue(), 
                (String) results.get(1).getValue(), 
                (String) results.get(2).getValue(), 
                (String) results.get(3).getValue(), 
                (String) results.get(4).getValue()
                );
    }

    public Tuple1<Boolean> getUpdateProjectOutput(TransactionReceipt transactionReceipt) {
        String data = transactionReceipt.getOutput();
        final Function function = new Function(FUNC_UPDATEPROJECT, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Bool>() {}));
        List<Type> results = FunctionReturnDecoder.decode(data, function.getOutputParameters());
        return new Tuple1<Boolean>(

                (Boolean) results.get(0).getValue()
                );
    }

    public List getProjectTransactions(BigInteger _projectId) throws ContractException {
        final Function function = new Function(FUNC_GETPROJECTTRANSACTIONS, 
                Arrays.<Type>asList(new org.fisco.bcos.sdk.abi.datatypes.generated.Uint256(_projectId)), 
                Arrays.<TypeReference<?>>asList(new TypeReference<DynamicArray<Bytes32>>() {}));
        List<Type> result = (List<Type>) executeCallWithSingleValueReturn(function, List.class);
        return convertToNative(result);
    }

    public TransactionReceipt createProject(String _title, String _description, String _researcherInfo) {
        final Function function = new Function(
                FUNC_CREATEPROJECT, 
                Arrays.<Type>asList(new org.fisco.bcos.sdk.abi.datatypes.Utf8String(_title), 
                new org.fisco.bcos.sdk.abi.datatypes.Utf8String(_description), 
                new org.fisco.bcos.sdk.abi.datatypes.Utf8String(_researcherInfo)), 
                Collections.<TypeReference<?>>emptyList());
        return executeTransaction(function);
    }

//    public byte[] createProject(String _title, String _description, String _researcherInfo, TransactionCallback callback) {
//        final Function function = new Function(
//                FUNC_CREATEPROJECT,
//                Arrays.<Type>asList(new org.fisco.bcos.sdk.abi.datatypes.Utf8String(_title),
//                new org.fisco.bcos.sdk.abi.datatypes.Utf8String(_description),
//                new org.fisco.bcos.sdk.abi.datatypes.Utf8String(_researcherInfo)),
//                Collections.<TypeReference<?>>emptyList());
//        return asyncExecuteTransaction(function, callback);
//    }

    public String getSignedTransactionForCreateProject(String _title, String _description, String _researcherInfo) {
        final Function function = new Function(
                FUNC_CREATEPROJECT, 
                Arrays.<Type>asList(new org.fisco.bcos.sdk.abi.datatypes.Utf8String(_title), 
                new org.fisco.bcos.sdk.abi.datatypes.Utf8String(_description), 
                new org.fisco.bcos.sdk.abi.datatypes.Utf8String(_researcherInfo)), 
                Collections.<TypeReference<?>>emptyList());
        return createSignedTransaction(function);
    }

    public Tuple3<String, String, String> getCreateProjectInput(TransactionReceipt transactionReceipt) {
        String data = transactionReceipt.getInput().substring(10);
        final Function function = new Function(FUNC_CREATEPROJECT, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Utf8String>() {}, new TypeReference<Utf8String>() {}, new TypeReference<Utf8String>() {}));
        List<Type> results = FunctionReturnDecoder.decode(data, function.getOutputParameters());
        return new Tuple3<String, String, String>(

                (String) results.get(0).getValue(), 
                (String) results.get(1).getValue(), 
                (String) results.get(2).getValue()
                );
    }

    public Tuple1<BigInteger> getCreateProjectOutput(TransactionReceipt transactionReceipt) {
        String data = transactionReceipt.getOutput();
        final Function function = new Function(FUNC_CREATEPROJECT, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Uint256>() {}));
        List<Type> results = FunctionReturnDecoder.decode(data, function.getOutputParameters());
        return new Tuple1<BigInteger>(

                (BigInteger) results.get(0).getValue()
                );
    }

    public byte[] projectTransactions(BigInteger param0, BigInteger param1) throws ContractException {
        final Function function = new Function(FUNC_PROJECTTRANSACTIONS, 
                Arrays.<Type>asList(new org.fisco.bcos.sdk.abi.datatypes.generated.Uint256(param0), 
                new org.fisco.bcos.sdk.abi.datatypes.generated.Uint256(param1)), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Bytes32>() {}));
        return executeCallWithSingleValueReturn(function, byte[].class);
    }

    public List<ProjectCreatedEventResponse> getProjectCreatedEvents(TransactionReceipt transactionReceipt) {
        List<Contract.EventValuesWithLog> valueList = extractEventParametersWithLog(PROJECTCREATED_EVENT, transactionReceipt);
        ArrayList<ProjectCreatedEventResponse> responses = new ArrayList<ProjectCreatedEventResponse>(valueList.size());
        for (Contract.EventValuesWithLog eventValues : valueList) {
            ProjectCreatedEventResponse typedResponse = new ProjectCreatedEventResponse();
            typedResponse.log = eventValues.getLog();
            typedResponse.projectId = (BigInteger) eventValues.getNonIndexedValues().get(0).getValue();
            typedResponse.title = (String) eventValues.getNonIndexedValues().get(1).getValue();
            typedResponse.txHash = (byte[]) eventValues.getNonIndexedValues().get(2).getValue();
            responses.add(typedResponse);
        }
        return responses;
    }

    public void subscribeProjectCreatedEvent(String fromBlock, String toBlock, List<String> otherTopics, EventCallback callback) {
        String topic0 = eventEncoder.encode(PROJECTCREATED_EVENT);
        subscribeEvent(ABI,BINARY,topic0,fromBlock,toBlock,otherTopics,callback);
    }

    public void subscribeProjectCreatedEvent(EventCallback callback) {
        String topic0 = eventEncoder.encode(PROJECTCREATED_EVENT);
        subscribeEvent(ABI,BINARY,topic0,callback);
    }

    public List<ProjectUpdatedEventResponse> getProjectUpdatedEvents(TransactionReceipt transactionReceipt) {
        List<Contract.EventValuesWithLog> valueList = extractEventParametersWithLog(PROJECTUPDATED_EVENT, transactionReceipt);
        ArrayList<ProjectUpdatedEventResponse> responses = new ArrayList<ProjectUpdatedEventResponse>(valueList.size());
        for (Contract.EventValuesWithLog eventValues : valueList) {
            ProjectUpdatedEventResponse typedResponse = new ProjectUpdatedEventResponse();
            typedResponse.log = eventValues.getLog();
            typedResponse.projectId = (BigInteger) eventValues.getNonIndexedValues().get(0).getValue();
            typedResponse.title = (String) eventValues.getNonIndexedValues().get(1).getValue();
            typedResponse.txHash = (byte[]) eventValues.getNonIndexedValues().get(2).getValue();
            responses.add(typedResponse);
        }
        return responses;
    }

    public void subscribeProjectUpdatedEvent(String fromBlock, String toBlock, List<String> otherTopics, EventCallback callback) {
        String topic0 = eventEncoder.encode(PROJECTUPDATED_EVENT);
        subscribeEvent(ABI,BINARY,topic0,fromBlock,toBlock,otherTopics,callback);
    }

    public void subscribeProjectUpdatedEvent(EventCallback callback) {
        String topic0 = eventEncoder.encode(PROJECTUPDATED_EVENT);
        subscribeEvent(ABI,BINARY,topic0,callback);
    }

    public List<ProjectCompletedEventResponse> getProjectCompletedEvents(TransactionReceipt transactionReceipt) {
        List<Contract.EventValuesWithLog> valueList = extractEventParametersWithLog(PROJECTCOMPLETED_EVENT, transactionReceipt);
        ArrayList<ProjectCompletedEventResponse> responses = new ArrayList<ProjectCompletedEventResponse>(valueList.size());
        for (Contract.EventValuesWithLog eventValues : valueList) {
            ProjectCompletedEventResponse typedResponse = new ProjectCompletedEventResponse();
            typedResponse.log = eventValues.getLog();
            typedResponse.projectId = (BigInteger) eventValues.getNonIndexedValues().get(0).getValue();
            typedResponse.txHash = (byte[]) eventValues.getNonIndexedValues().get(1).getValue();
            responses.add(typedResponse);
        }
        return responses;
    }

    public void subscribeProjectCompletedEvent(String fromBlock, String toBlock, List<String> otherTopics, EventCallback callback) {
        String topic0 = eventEncoder.encode(PROJECTCOMPLETED_EVENT);
        subscribeEvent(ABI,BINARY,topic0,fromBlock,toBlock,otherTopics,callback);
    }

    public void subscribeProjectCompletedEvent(EventCallback callback) {
        String topic0 = eventEncoder.encode(PROJECTCOMPLETED_EVENT);
        subscribeEvent(ABI,BINARY,topic0,callback);
    }

    public List<ProjectDeletedEventResponse> getProjectDeletedEvents(TransactionReceipt transactionReceipt) {
        List<Contract.EventValuesWithLog> valueList = extractEventParametersWithLog(PROJECTDELETED_EVENT, transactionReceipt);
        ArrayList<ProjectDeletedEventResponse> responses = new ArrayList<ProjectDeletedEventResponse>(valueList.size());
        for (Contract.EventValuesWithLog eventValues : valueList) {
            ProjectDeletedEventResponse typedResponse = new ProjectDeletedEventResponse();
            typedResponse.log = eventValues.getLog();
            typedResponse.projectId = (BigInteger) eventValues.getNonIndexedValues().get(0).getValue();
            typedResponse.reason = (String) eventValues.getNonIndexedValues().get(1).getValue();
            typedResponse.txHash = (byte[]) eventValues.getNonIndexedValues().get(2).getValue();
            responses.add(typedResponse);
        }
        return responses;
    }

    public void subscribeProjectDeletedEvent(String fromBlock, String toBlock, List<String> otherTopics, EventCallback callback) {
        String topic0 = eventEncoder.encode(PROJECTDELETED_EVENT);
        subscribeEvent(ABI,BINARY,topic0,fromBlock,toBlock,otherTopics,callback);
    }

    public void subscribeProjectDeletedEvent(EventCallback callback) {
        String topic0 = eventEncoder.encode(PROJECTDELETED_EVENT);
        subscribeEvent(ABI,BINARY,topic0,callback);
    }

    public List<TransactionRecordedEventResponse> getTransactionRecordedEvents(TransactionReceipt transactionReceipt) {
        List<Contract.EventValuesWithLog> valueList = extractEventParametersWithLog(TRANSACTIONRECORDED_EVENT, transactionReceipt);
        ArrayList<TransactionRecordedEventResponse> responses = new ArrayList<TransactionRecordedEventResponse>(valueList.size());
        for (Contract.EventValuesWithLog eventValues : valueList) {
            TransactionRecordedEventResponse typedResponse = new TransactionRecordedEventResponse();
            typedResponse.log = eventValues.getLog();
            typedResponse.txHash = (byte[]) eventValues.getIndexedValues().get(0).getValue();
            typedResponse.projectId = (BigInteger) eventValues.getIndexedValues().get(1).getValue();
            typedResponse.actionType = (String) eventValues.getNonIndexedValues().get(0).getValue();
            responses.add(typedResponse);
        }
        return responses;
    }

    public void subscribeTransactionRecordedEvent(String fromBlock, String toBlock, List<String> otherTopics, EventCallback callback) {
        String topic0 = eventEncoder.encode(TRANSACTIONRECORDED_EVENT);
        subscribeEvent(ABI,BINARY,topic0,fromBlock,toBlock,otherTopics,callback);
    }

    public void subscribeTransactionRecordedEvent(EventCallback callback) {
        String topic0 = eventEncoder.encode(TRANSACTIONRECORDED_EVENT);
        subscribeEvent(ABI,BINARY,topic0,callback);
    }

    public static MedicalCrowdsourcing load(String contractAddress, Client client, CryptoKeyPair credential) {
        return new MedicalCrowdsourcing(contractAddress, client, credential);
    }

    public static MedicalCrowdsourcing deploy(Client client, CryptoKeyPair credential) throws ContractException {
        return deploy(MedicalCrowdsourcing.class, client, credential, getBinary(client.getCryptoSuite()), "");
    }

    public static class ProjectCreatedEventResponse {
        public TransactionReceipt.Logs log;

        public BigInteger projectId;

        public String title;

        public byte[] txHash;
    }

    public static class ProjectUpdatedEventResponse {
        public TransactionReceipt.Logs log;

        public BigInteger projectId;

        public String title;

        public byte[] txHash;
    }

    public static class ProjectCompletedEventResponse {
        public TransactionReceipt.Logs log;

        public BigInteger projectId;

        public byte[] txHash;
    }

    public static class ProjectDeletedEventResponse {
        public TransactionReceipt.Logs log;

        public BigInteger projectId;

        public String reason;

        public byte[] txHash;
    }

    public static class TransactionRecordedEventResponse {
        public TransactionReceipt.Logs log;

        public byte[] txHash;

        public BigInteger projectId;

        public String actionType;
    }
}
